package br.gov.capgov.treinamento.ejb.sessionbeans;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.gov.capgov.treinamento.jpa.entidades.Sistema;

@Stateless 
public class SistemaEJB
{
	@PersistenceContext
	private EntityManager manager;
	
	public List<Sistema> listaSistemas()
	{ 
		Query query = manager.createQuery("FROM " + Sistema.class.getName() + " ORDER BY nome_sistema");
		List<Sistema> sistemas = query.getResultList();
		
		return sistemas;
	}
	
	public void insereSistema(Sistema sistema)
	{
		manager.persist(sistema);	
	}
	
	public void removeSistema(Integer id)
	{
		Sistema sistema = manager.find(Sistema.class, id);
		manager.remove(sistema);	
	}	
	
	public Object carregaElemento(Class<?> classe, Object id)
	{	
		Object obj = new Object();

		try
		{
			obj = manager.find(classe, id);
		}
		catch (Exception e)
		{
			e.printStackTrace();
			manager.getTransaction().rollback();	
		} 
		
		return obj;
	}
	 
	public void alterar(Object obj)
	{
		try
		{
			manager.getTransaction().begin();
			manager.merge(obj);
			manager.getTransaction().commit();
		}
		catch(Exception e)
		{
			manager.getTransaction().rollback();
			e.printStackTrace();
		} 
	}
	
	public Sistema procuraSistemaID(Integer id)
	{
		return this.manager.find(Sistema.class, id) ;
	}
	
	public List<Sistema> buscaSistemaVerificarTrue()
	{
		Query query = manager.createQuery("FROM " + Sistema.class.getName()+ " as u where verificar = true ");
		List<Sistema> sistemas = query.getResultList();
		
		return sistemas;
	}
	
	public Sistema procuraSistemaNomeBD(String nome)
	{
		Query query = manager.createQuery("select u from "+ Sistema.class.getName() + " as u where nome_sistema = '"+ nome +"' ");	

		try
		{
			Sistema sistema = (Sistema) query.getSingleResult();
			return sistema;
		}
		catch (NoResultException e)
		{
			return null;
		}
	}
	
	public void atualizaSistema(Sistema sistema)
	{
		manager.merge(sistema);	
	}
	
	public Sistema carregaDisponibilidade(Sistema sistema)
	{
		Query query = manager.createQuery("FROM " + Sistema.class.getName());
		
		try
		{
			Sistema sist = (Sistema) query.getSingleResult();
			return sist;
		}
		catch(NoResultException e)
		{
			return null;
		}
	}	
}